home *** CD-ROM | disk | FTP | other *** search
- /*-- AutoRev header do NOT edit!
- *
- * Program : Main.c
- * Copyright : Copyright © 1991-92 Jaba Development
- * Author : Jan van den Baard
- * Creation Date : 04-Apr-92
- * Current version : 2.0
- * Translator : Dice v2.06.40
- *
- * REVISION HISTORY
- *
- * Date Version Comment
- * --------- ------- ------------------------------------------
- * 04-Apr-92 2.0 Main program. (rewrite)
- *
- *-- REV_END --*/
-
- #include "View.h"
-
- struct WBStartup *WBenchMsg = NULL;
-
- UBYTE *CX_PRIORITY = "CX_PRIORITY";
- UBYTE *CX_POPWINDOW = "CX_POPUP";
- UBYTE *CX_VIEW = "VIEW";
- UBYTE *CX_FLUSH = "FLUSH";
- UBYTE *CX_QUIT = "QUIT";
-
- WORD CX_DEF_PRIORITY = 0;
- UBYTE *CX_DEF_POPWINDOW = "YES";
- UBYTE *CX_DEF_VIEW = "lalt lcommand v";
- UBYTE *CX_DEF_FLUSH = "lalt lcommand f";
- UBYTE *CX_DEF_QUIT = "lalt lcommand q";
-
- UBYTE *vwVersion = "\0$VER: " CX_NAME " 37.45 (16.4.92)";
-
- struct MsgPort *vwCxPort = NULL;
- struct MsgPort *vwIdPort = NULL;
-
- ULONG vwCxMask = NULL;
- ULONG vwIdMask = NULL;
-
- UBYTE vwDopen = FALSE;
- UBYTE vwIsOpen = FALSE;
- UBYTE vwFsu = TRUE;
- UBYTE vwCustom = FALSE;
-
- UWORD vwTabSize;
-
- CxObj *vwBroker = NULL;
-
- UBYTE *vwQuitStr, *vwFlushStr, *vwViewStr;
-
- struct NewBroker vwNewBroker = {
- NB_VERSION, CX_NAME, CX_TITLE, CX_DESCRIPTION,
- NBU_NOTIFY | NBU_UNIQUE, COF_SHOW_HIDE, NULL, 0
- };
-
- struct Window *vwWindow = NULL;
- struct Screen *vwScreen = NULL;
- struct AsciiText *vwText = NULL;
- struct RastPort *vwRPort;
- struct TextFont *vwFont;
- struct Line *vwFirst;
- struct Line *vwLast;
- struct Process *vwProc;
- struct StringScan vwSearch;
- struct TextBlock vwBlocks[ 10 ];
- APTR vwWdPtr;
-
- #ifdef __DETACH
- ULONG *vwArgs;
- ULONG vwWBArgs[14] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- UBYTE *_procname = "ViewD2.0";
- UBYTE *_template = "Name,CX_PRIORITY/K/N,CX_POPUP/K,VIEW/K,FLUSH/K,QUIT/K,LACE/S,SUPER/S,PRODUCTIVITY/S,A2024TENHZ/S,A2024FIFTEENHZ/S,NOPOINTER/S,SCROLL/S,TABS/K/N";
- UBYTE *_exthelp = NULL;
- LONG _stack = 4096L;
- LONG _priority = NULL;
- LONG _BackGroundIO = NULL;
- #else
- ULONG vwArgs[14] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- struct RDArgs vwIArgs = { { 0, 0, 0}, 0, 0, 0, 0, 0 };
- struct RDArgs *vwFArgs = NULL;
- UBYTE *Template = "Name,CX_PRIORITY/K/N,CX_POPUP/K,VIEW/K,FLUSH/K,QUIT/K,LACE/S,SUPER/S,PRODUCTIVITY/S,A2024TENHZ/S,A2024FIFTEENHZ/S,NOPOINTER/S,SCROLL/S,TABS/K/N";
- #endif
-
- UBYTE vwFound = FALSE;
- UBYTE vwPrinting = FALSE;
- UBYTE vwErr = FALSE;
-
- ULONG vwSignal, vwShown, vwNum, vwId;
- UWORD vwYMax, vwMode, vwPMode, vwMaxLin, vwPMark;
-
- UWORD vwDriPens = ~0;
-
- UBYTE vwPath[ 256 ];
- UBYTE vwPatt[ 32 ];
- UBYTE vwFile[ 32 ];
- UBYTE vwName[ 512 ];
- UBYTE vwFBuf[ 256 ];
-
- extern struct IntuitionBase *IntuitionBase;
- extern struct GfxBase *GfxBase;
- extern struct GadToolsBase *GadToolsBase;
- extern struct UtilityBase *UtilityBase;
-
- extern UBYTE StdStr[];
- extern UBYTE ClearStr[];
- extern UBYTE MoveStr[];
- extern UBYTE ScrUpStr[];
- extern UBYTE ScrDnStr[];
- extern UBYTE ResStr[];
-
- extern ULONG vwClass;
- extern UWORD vwCode, vwQualifier;
-
- extern __far struct Custom custom;
-
- struct CxBase *CxBase = NULL;
- struct IconBase *IconBase = NULL;
- struct NoFragBase *NoFragBase = NULL;
- struct PPBase *PPBase = NULL;
- struct ReqToolsBase *ReqToolsBase = NULL;
-
- Prototype void OpenLibraries( void );
- Prototype void CloseLibraries( void );
- Prototype void Quit( long );
- Prototype void OpenDisplay( void );
- Prototype void CloseDisplay( void );
- Prototype void QuitCommodity( void );
- Prototype void myMain( long );
- Prototype void MainLoop( void );
- Prototype void SetupCustom( void );
- Prototype void QuitCommodity( void );
- Prototype void SetupCommodity( void );
- Prototype void CheckDirExtension( UBYTE * );
- Prototype void LoadFile( long );
- Prototype void DisplayText( void );
- Prototype void MoveTo( UBYTE c, UBYTE r );
- Prototype void LineDown( void );
- Prototype void LineUp( void );
- Prototype void Top( void );
- Prototype void Bottom( void );
- Prototype void PageDown( void );
- Prototype void PageUp( void );
- Prototype void Percentage( void );
- Prototype void BytesShown( void );
- Prototype void InfoLine( void );
- Prototype void ErrorLine( UBYTE * );
- Prototype void Error( UBYTE * );
- Prototype long IsAsciiChar( UBYTE );
- Prototype long CheckAscii( UBYTE * );
- Prototype void PrintFound( UWORD );
- Prototype long CheckPP( void );
- Prototype long CountEsc( struct Line *, long );
- Prototype long ParseName( void );
- Prototype long IsItADir( void );
- Prototype void _waitwbmsg( void );
-
- void OpenLibraries( void )
- {
- NoFragBase = ( struct NoFragBase * ) OpenLibrary( "nofrag.library", NOFRAG_VERSION );
- CxBase = ( struct CxBase * ) OpenLibrary( "commodities.library", 37L );
- IconBase = ( struct IconBase * ) OpenLibrary( "icon.library", 36L );
- PPBase = ( struct PPBase * ) OpenLibrary( "powerpacker.library", 34L );
- ReqToolsBase = ( struct ReqToolsBase * ) OpenLibrary( REQTOOLSNAME, REQTOOLSVERSION );
-
- if ( ! NoFragBase || ! CxBase || ! IconBase || ! ReqToolsBase )
- Quit( 20L );
- }
-
- void CloseLibraries( void )
- {
- if ( ReqToolsBase ) CloseLibrary(( struct Library * )ReqToolsBase );
- if ( PPBase ) CloseLibrary(( struct Library * )PPBase );
- if ( IconBase ) CloseLibrary( IconBase );
- if ( CxBase ) CloseLibrary( CxBase );
- if ( NoFragBase ) CloseLibrary( NoFragBase );
- }
-
- void OpenDisplay( void )
- {
- struct DimensionInfo disp;
- struct Screen *lock;
- ULONG modes, id;
- UWORD width, height, depth = 2;
-
- if ( ! vwCustom ) {
- if ( lock = LockPubScreen( "Workbench" )) {
-
- width = lock->Width;
- height = lock->Height;
- modes = lock->ViewPort.Modes;
- depth = lock->BitMap.Depth;
- id = GetVPModeID( &lock->ViewPort );
-
- if ( vwArgs[ 6 ] )
- id |= LORESLACE_KEY;
-
- UnlockPubScreen( NULL, lock );
- } else
- Quit( 20L );
- } else
- id = vwId;
-
- GetDisplayInfoData( NULL, ( UBYTE * )&disp, sizeof( struct DimensionInfo ), DTAG_DIMS, id );
-
- width = disp.TxtOScan.MaxX + 1;
- height = disp.TxtOScan.MaxY + 1;
-
- if ( ! ( vwScreen = OpenScreenTags( NULL, SA_Pens, &vwDriPens,
- SA_DisplayID, id,
- SA_Overscan, OSCAN_TEXT,
- SA_Width, width,
- SA_Height, height,
- SA_Depth, depth,
- TAG_DONE )))
- Quit( 20L );
-
- if ( ! ( vwWindow = OpenWindowTags( NULL, WA_RptQueue, 1,
- WA_Width, width,
- WA_Height, height,
- WA_IDCMP, IDCMP_RAWKEY | IDCMP_ACTIVEWINDOW | IDCMP_INACTIVEWINDOW,
- WA_Flags, WFLG_ACTIVATE | WFLG_RMBTRAP | WFLG_SMART_REFRESH | WFLG_BORDERLESS | WFLG_BACKDROP,
- WA_CustomScreen, vwScreen,
- TAG_DONE )))
- Quit( 20L );
-
- ShowTitle( vwScreen, FALSE );
-
- if ( vwArgs[ 11 ] ) OFF_SPRITE;
-
- vwIdPort = vwWindow->UserPort;
- vwIdMask = ( 1L << vwIdPort->mp_SigBit );
- vwWdPtr = vwProc->pr_WindowPtr;
- vwProc->pr_WindowPtr = (APTR)vwWindow;
- vwRPort = vwWindow->RPort;
- vwFont = vwRPort->Font;
- vwMaxLin = ( height / vwFont->tf_YSize ) - 1;
-
- sprintf(( char * )&StdStr[ 7 ], "%02.2ldy", vwFont->tf_YSize );
-
- if ( ! OpenConsole())
- Quit( 20L );
-
- vwIsOpen = TRUE;
-
- if ( ! vwText ) {
- if ( vwFsu ) {
- if ( strlen( vwName )) {
- if ( ! ParseName()) LoadFile( TRUE );
- else LoadFile( FALSE );
- } else
- LoadFile( TRUE );
- } else
- LoadFile( TRUE );
- }
-
- if ( vwText ) {
- DisplayText();
- BytesShown();
- InfoLine();
- } else
- InfoLine();
-
- vwFsu = FALSE;
- }
-
- long IsItADir( void )
- {
- struct FileInfoBlock *fib;
- BPTR lock;
- long ret = -1L;
-
- if( fib = ( struct FileInfoBlock * )AllocDosObjectTags( DOS_FIB, TAG_DONE )) {
- if( lock = Lock(( char * )vwName, ACCESS_READ )) {
- Examine( lock, fib );
- ret = fib->fib_DirEntryType;
- UnLock( lock );
- }
- FreeDosObject( DOS_FIB, fib );
- }
- return(ret);
- }
-
-
- long ParseName( void )
- {
- char *str;
- long len;
-
- if( strlen( vwName )) {
- if( str = PathPart( vwName )) {
- if ( IsItADir() < 0 ) {
- if ( *str == '/' ) str++;
- strcpy( vwFile, str );
- len = strlen( vwName ) - strlen( vwFile );
- strcpy( vwPath, vwName );
- vwPath[ len ] = 0;
- } else
- strcpy( vwPath, vwName );
- } else
- strcpy( vwFile, vwName );
- }
- return( strlen( vwFile ));
- }
-
- void CloseDisplay( void )
- {
- CloseConsole();
-
- if ( vwArgs[ 11 ] ) ON_SPRITE;
-
- if ( vwWindow ) {
- vwProc->pr_WindowPtr = vwWdPtr;
- ClearMsgPort( vwIdPort );
- CloseWindow( vwWindow );
- vwWindow = NULL;
- vwIdPort = NULL;
- vwIdMask = NULL;
- }
-
- if ( vwScreen ) {
- CloseScreen( vwScreen );
- vwScreen = NULL;
- }
-
- vwIsOpen = FALSE;
- }
-
- void Quit( long code )
- {
- ON_SPRITE;
-
- CloseDisplay();
- QuitCommodity();
-
- if ( vwText ) FreeAscii( vwText );
-
- CloseLibraries();
-
- #ifndef __DETACH
- if ( vwFArgs ) FreeArgs( vwFArgs );
- _exit( code );
- #else
- exit( code );
- #endif
- }
-
- void SetupCommodity( void )
- {
- CxObj *tmp;
- struct WBArg *wba;
- char *pw, **ttypes;
- WORD pri;
-
- if ( WBenchMsg ) {
- ttypes = ArgArrayInit( NULL, ( UBYTE ** )WBenchMsg );
-
- pri = ArgInt( ttypes, CX_PRIORITY, CX_DEF_PRIORITY );
- pw = ArgString( ttypes, CX_POPWINDOW, CX_DEF_POPWINDOW );
- vwViewStr = ArgString( ttypes, CX_VIEW, CX_DEF_VIEW );
- vwFlushStr = ArgString( ttypes, CX_FLUSH, CX_DEF_FLUSH );
- vwQuitStr = ArgString( ttypes, CX_QUIT, CX_DEF_QUIT );
- vwArgs[ 6 ] = ArgString( ttypes, "LACE", NULL );
- vwArgs[ 7 ] = ArgString( ttypes, "SUPER", NULL );
- vwArgs[ 8 ] = ArgString( ttypes, "PRODUCTIVITY", NULL );
- vwArgs[ 9 ] = ArgString( ttypes, "A2024TENHZ", NULL );
- vwArgs[ 10] = ArgString( ttypes, "A2024FIFTEENHZ", NULL );
- vwArgs[ 11] = ArgString( ttypes, "NOPOINTER", NULL );
- vwArgs[ 12] = ArgString( ttypes, "SCROLL", NULL );
- vwTabSize = ArgInt( ttypes, "TABS", ANSITAB );
-
- wba = WBenchMsg->sm_ArgList;
-
- if ( WBenchMsg->sm_NumArgs > 1 ) {
- wba++;
- CurrentDir( wba->wa_Lock );
- if ( wba->wa_Name ) strcpy( vwName, ( char * )wba->wa_Name );
- }
- } else {
- if ( vwArgs[ 0 ] ) strcpy( vwName, (char *)vwArgs[ 0 ] );
-
- if ( vwArgs[ 1 ] ) pri = vwArgs[ 1 ];
- else pri = CX_DEF_PRIORITY;
- if ( vwArgs[ 2 ] ) pw = ( char * )vwArgs[ 2 ];
- else pw = CX_DEF_POPWINDOW;
- if ( vwArgs[ 3 ] ) vwViewStr = ( char * )vwArgs[ 3 ];
- else vwViewStr = CX_DEF_VIEW;
- if ( vwArgs[ 4 ] ) vwFlushStr = ( char * )vwArgs[ 4 ];
- else vwFlushStr = CX_DEF_FLUSH;
- if ( vwArgs[ 5 ] ) vwQuitStr = ( char * )vwArgs[ 5 ];
- else vwQuitStr = CX_DEF_QUIT;
- if ( vwArgs[ 13 ]) vwTabSize = (UWORD)(*((ULONG *)vwArgs[ 13 ]));
- else vwTabSize = ANSITAB;
- }
-
- SetupCustom();
-
- if ( ! Stricmp( pw, CX_DEF_POPWINDOW )) vwDopen = TRUE;
- else vwDopen = FALSE;
-
- if ( ! ( vwCxPort = CreateMsgPort()))
- Quit( RETURN_FAIL );
-
- if ( vwTabSize < MINTAB ) vwTabSize = MINTAB;
- else if ( vwTabSize > MAXTAB ) vwTabSize = MAXTAB;
-
- vwNewBroker.nb_Pri = pri;
- vwNewBroker.nb_Port = vwCxPort;
-
- vwCxMask = ( 1L << vwCxPort->mp_SigBit );
-
- if ( ! ( vwBroker = CxBroker( &vwNewBroker, NULL )))
- Quit( RETURN_FAIL );
-
- if ( ! ( tmp = HotKey( vwQuitStr, vwCxPort, CXC_QUIT )))
- Quit( RETURN_FAIL );
- AttachCxObj( vwBroker, tmp );
-
- if ( ! ( tmp = HotKey( vwFlushStr, vwCxPort, CXC_FLUSH )))
- Quit( RETURN_FAIL );
- AttachCxObj( vwBroker, tmp );
-
- if ( ! ( tmp = HotKey( vwViewStr, vwCxPort, CXC_VIEW )))
- Quit( RETURN_FAIL );
- AttachCxObj( vwBroker, tmp );
-
- if( CxObjError( vwBroker ))
- Quit( RETURN_FAIL );
-
- if(WBenchMsg)
- ArgArrayDone();
-
- CxOn( vwBroker );
- }
-
- void SetupCustom( void )
- {
- if ( vwArgs[ 7 ] && ! ModeNotAvailable( DEFAULT_MONITOR_ID | SUPER_KEY )) {
- vwId = DEFAULT_MONITOR_ID | SUPER_KEY;
- vwCustom = TRUE;
- } else if ( vwArgs[ 8 ] && ! ModeNotAvailable( DEFAULT_MONITOR_ID | VGAPRODUCT_KEY )) {
- vwId = DEFAULT_MONITOR_ID | VGAPRODUCT_KEY;
- vwCustom = TRUE;
- } else if ( vwArgs[ 9 ] && ! ModeNotAvailable( DEFAULT_MONITOR_ID | A2024TENHERTZ_KEY )) {
- vwId = DEFAULT_MONITOR_ID | A2024TENHERTZ_KEY;
- vwCustom = TRUE;
- } else if ( vwArgs[ 10 ] && ! ModeNotAvailable( DEFAULT_MONITOR_ID | A2024FIFTEENHERTZ_KEY )) {
- vwId = DEFAULT_MONITOR_ID | A2024FIFTEENHERTZ_KEY;
- vwCustom = TRUE;
- } else
- vwCustom = FALSE;
-
- if ( vwArgs[ 6 ] ) vwId |= LORESLACE_KEY;
- }
-
- void QuitCommodity( void )
- {
- if ( vwBroker ) DeleteCxObjAll( vwBroker );
-
- if( vwCxPort ) {
- ClearMsgPort( vwCxPort );
- DeleteMsgPort( vwCxPort );
- }
- }
-
- void MainLoop( void )
- {
- struct Message *msg;
- struct IntuiMessage *imsg;
- ULONG sig, type, id, class;
- BOOL running = TRUE;
-
- if ( vwDopen ) OpenDisplay();
-
- do {
- if ( vwIsOpen) Percentage();
-
- sig = Wait( SIGBREAKF_CTRL_C | vwCxMask | vwIdMask );
-
- if (( sig & SIGBREAKF_CTRL_C ) == SIGBREAKF_CTRL_C ) {
- if ( ! vwPrinting ) running = FALSE;
- } else if (( sig & vwCxMask ) == vwCxMask ) {
-
- while (( msg = (struct Message *)GetMsg( vwCxPort ))) {
-
- id = CxMsgID(( CxMsg * )msg );
- type = CxMsgType(( CxMsg * )msg );
- ReplyMsg( msg );
-
- switch( type ) {
-
- case CXM_IEVENT:
-
- switch( id ) {
-
- case CXC_VIEW:
- if ( ! vwIsOpen )
- OpenDisplay();
- else {
- ScreenToFront( vwScreen );
- if( vwArgs[ 11 ] ) OFF_SPRITE;
- }
- break;
-
- case CXC_FLUSH:
- if ( ! vwIsOpen ) {
- if ( vwText ) FreeAscii( vwText );
- vwText = NULL;
- }
- break;
-
- case CXC_QUIT:
- if( ! vwIsOpen ) {
- if ( ! vwPrinting ) running = FALSE;
- }
- break;
- }
- break;
-
- case CXM_COMMAND:
- switch( id ) {
-
- case CXCMD_KILL:
- if ( ! vwPrinting ) running = FALSE;
- break;
-
- case CXCMD_DISABLE:
- CxOff( vwBroker );
- break;
-
- case CXCMD_ENABLE:
- CxOn( vwBroker );
- break;
-
- case CXCMD_UNIQUE:
- case CXCMD_APPEAR:
- if ( ! vwIsOpen )
- OpenDisplay();
- else {
- ScreenToFront( vwScreen );
- if( vwArgs[ 11 ] ) OFF_SPRITE;
- }
- break;
-
- case CXCMD_DISAPPEAR:
- if ( vwIsOpen )
- CloseDisplay();
- break;
- }
- break;
- }
- }
- } else if ( vwIsOpen ) {
- if (( sig & vwIdMask ) == vwIdMask ) {
-
- while ( ReadMsgPort( vwWindow->UserPort )) {
- Percentage();
-
- switch( vwClass ) {
- case IDCMP_RAWKEY:
- HandleKeyboard( vwCode, vwQualifier );
- break;
-
- case IDCMP_ACTIVEWINDOW:
- if ( vwArgs[ 11 ] ) OFF_SPRITE;
- break;
-
- case IDCMP_INACTIVEWINDOW:
- if ( vwArgs[ 11 ] ) ON_SPRITE;
- break;
- }
- if ( ! vwIsOpen ) break;
- }
- }
- }
- } while( running == TRUE );
-
- if( vwIsOpen )
- CloseDisplay();
- CxOff( vwBroker );
- Quit(NULL);
- }
-
- void CheckDirExtension( UBYTE *name )
- {
- UWORD len = strlen( name );
-
- if ( len ) {
- if ( name[ len - 1 ] != ':' && name[ len - 1 ] != '/' )
- strcat( name, "/" );
- }
- }
-
- void LoadFile( long request )
- {
- UBYTE *ppdata, *fname;
- ULONG pplen;
- BPTR ppout;
- BOOL pptemp = FALSE, ret = TRUE;
- LONG pperr;
- struct BuffIO *file = NULL;
- struct Line *line;
-
- ErrorLine( CX_NAME " v" CX_VERSION " © 1991-92 Jaba Development" );
-
- if ( request ) {
- if ( vwArgs[ 11 ] ) ON_SPRITE;
-
- ret = FileRequest( vwWindow, "Select file to load...", vwFile, vwPath, vwPatt, FR_LOAD );
-
- if ( vwArgs[ 11 ] ) OFF_SPRITE;
- }
-
- if ( ret ) {
- if ( vwText ) {
- FreeAscii( vwText );
- vwText = NULL;
- ClrBlk();
- }
-
- Inform( ClearStr );
- Inform( StdStr );
-
- Busy();
-
- if ( CheckPP()) {
- if ( PPBase ) {
- ErrorLine( "Loading and decrunching file..." );
- if ( vwArgs[ 11 ] ) ON_SPRITE;
- if (( pperr = ppLoadData( vwName, DECR_POINTER, MEMF_PUBLIC, &ppdata, &pplen, NULL )) < 0 ) {
- switch( pperr ) {
- case PP_OPENERR:
- Error( "PPLib: Can't open the file." );
- break;
- case PP_READERR:
- Error("PPLIB: Read error.");
- break;
- case PP_NOMEMORY:
- Error("PPLIB: Out of memory.");
- break;
- case PP_PASSERR:
- Error("PPLIB: Incorrect password.");
- break;
- case PP_UNKNOWNPP:
- Error("PPLIB: Unknown PowerPacker version.");
- break;
- }
- return;
- }
-
- if ( vwArgs[ 11 ] ) OFF_SPRITE;
- fname = "T:view.pp.tmp.v" CX_VERSION ".decrunched";
- if ( ppout = Open( fname, MODE_NEWFILE )) {
- if ( Write( ppout, ppdata, pplen ) != pplen )
- Error( "Error writing temporary file." );
- else
- pptemp = TRUE;
- Close( ppout );
- } else
- Error( "Can't open temporary file." );
-
- if ( ppdata ) FreeMem( ppdata, pplen );
-
- if ( ! pptemp ) goto ppCleanUp;
- } else
- Error( "Can't load powerpacker files\nwithout the powerpacker.library." );
- } else {
- ErrorLine( "Loading file..." );
- fname = vwName;
- }
-
- if ( CheckAscii( fname )) {
- if ( vwText = AllocAscii( vwTabSize, MaxCol() + 1, ATF_SkipEsc | ATF_TabConvert )) {
- if ( file = BOpen( fname, MODE_OLDFILE )) {
- while( line = BGetS( file, vwText ))
- AddTail(( struct List * )vwText, ( struct Node * )line );
- switch( BIoErr( file )) {
- case ASE_READ:
- Error( "Read error." );
- goto CleanExit;
- case ASE_NOMEM:
- Error( "Out of memory." );
- goto CleanExit;
- }
-
- BClose( file );
- vwFirst = vwText->First;
- vwFound = FALSE;
- DisplayText();
- BytesShown();
- InfoLine();
- goto ppCleanUp;
- } else {
- Error( "Could not open the file." );
- goto CleanExit;
- }
- } else {
- Error( "Out of memory." );
- goto CleanExit;
- }
- } else {
- Error( "File contains binary." );
- goto CleanExit;
- }
- } else goto ppCleanUp;
-
- CleanExit:
- if ( vwText ) {
- FreeAscii( vwText );
- vwText = NULL;
- }
-
- if ( file ) BClose( file );
-
- ppCleanUp:
- ClearMsgPort( vwIdPort );
- Ready();
- if ( pptemp ) DeleteFile( fname );
- }
-
- void DisplayText( void )
- {
- UWORD y = 1, i = 0;
-
- if ( ! vwText ) return;
-
- for( vwLast = vwFirst; i < vwMaxLin; i++, vwLast = vwLast->Next, y++ ) {
- if ( vwLast == vwText->Last->Next ) break;
- MoveTo( 1 , y );
- Display( vwLast );
- if ( vwFound && vwLast == vwSearch.Line ) PrintFound( y );
- }
- vwYMax = y - 1;
- }
-
- void MoveTo( UBYTE c, UBYTE r )
- {
- sprintf((char *)&MoveStr[ 1 ], "%02ld;%02ldH", r, c );
- Inform( MoveStr );
- }
-
- void LineDown( void )
- {
- if ( ! vwText ) return;
- if ( vwLast == vwText->Last->Next ) return;
-
- vwFirst = vwFirst->Next;
- Inform( ScrUpStr );
- MoveTo( 1, vwYMax );
- Display( vwLast );
-
- vwShown += vwLast->Size;
-
- if ( vwFound && vwLast == vwSearch.Line ) PrintFound( vwYMax );
-
- vwLast = vwLast->Next;
- }
-
- void LineUp( void )
- {
- if ( ! vwText ) return;
- if ( vwFirst == vwText->First ) return;
-
- vwLast = vwLast->Prev;
- vwShown -= vwLast->Size;
- vwFirst = vwFirst->Prev;
-
- Inform( ScrDnStr );
- MoveTo( 1, 1 );
- Display( vwFirst );
-
- if ( vwFound && vwFirst == vwSearch.Line ) PrintFound( 1 );
- }
-
- void Top( void )
- {
- if ( ! vwText ) return;
- if ( vwFirst == vwText->First ) return;
-
- vwFirst = vwText->First;
-
- Inform( ClearStr );
- DisplayText();
- BytesShown();
- }
-
- void Bottom( void )
- {
- UWORD i;
-
- if ( ! vwText ) return;
- if ( vwLast == vwText->Last->Next ) return;
-
- vwLast = vwFirst = vwText->Last;
-
- for( i = 1; i < vwMaxLin; i++ )
- vwFirst = vwFirst->Prev;
-
- vwShown = vwText->NumBytes;
-
- Inform( ClearStr );
- DisplayText();
- }
-
- void PageDown( void )
- {
- UWORD i;
-
- if ( ! vwText ) return;
- if ( vwLast == vwText->Last->Next ) return;
-
- if ( ! vwArgs[ 12 ] ) {
- for( i = 1; i < vwMaxLin; i++ ) {
- vwFirst = vwFirst->Next;
- vwShown += vwLast->Size;
- if (( vwLast = vwLast->Next ) == vwText->Last->Next ) break;
- }
- Inform( ClearStr );
- DisplayText();
- } else {
- for ( i = 1; i < vwMaxLin; i++ ) {
- LineDown();
- Percentage();
- }
- }
- }
-
- void PageUp( void )
- {
- UWORD i;
-
- if ( ! vwText ) return;
- if ( vwFirst == vwText->First ) return;
-
- if ( ! vwArgs[ 12 ] ) {
- for( i = 1; i < vwMaxLin; i++ ) {
- vwLast = vwLast->Prev;
- vwShown -= vwLast->Size;
- if (( vwFirst = vwFirst->Prev ) == vwText->First ) break;
- }
- Inform( ClearStr );
- DisplayText();
- } else {
- for ( i = 1; i < vwMaxLin; i++ ) {
- LineUp();
- Percentage();
- }
- }
- }
-
- void Percentage( void )
- {
- ULONG perc;
- char pcbuf[5];
-
- if ( ! vwText ) return;
-
- perc = ( ULONG )( vwShown * 100 / vwText->NumBytes );
-
- if ( perc == 100 && ( vwLast != vwText->Last->Next )) perc = 99;
-
- vwNum = perc;
-
- sprintf(pcbuf,"%3ld%%",perc);
-
- SetAPen( vwRPort, 3 );
- SetBPen( vwRPort, 2 );
- SetDrMd( vwRPort, JAM2 );
- Move( vwRPort, 544, vwFont->tf_Baseline );
- Text( vwRPort, pcbuf, strlen( pcbuf ));
- SetAPen( vwRPort, 1 );
- Move( vwRPort, 584, vwFont->tf_Baseline );
- Text( vwRPort, "Shown.", 6);
- }
-
- void BytesShown( void )
- {
- struct Line *line;
-
- vwShown = 0L;
-
- for ( line = vwText->First; line != vwLast; line = line->Next )
- vwShown += line->Size;
- }
-
- void InfoLine( void )
- {
- UBYTE ibuf[100];
-
- ClrLin();
-
- vwErr = FALSE;
-
- SetAPen( vwRPort, 1 );
- SetDrMd( vwRPort, JAM1 );
-
- if ( vwText )
- sprintf( ibuf, "File : %-31.31ls %-6.6ld Lines, %-6.6ld Bytes.", &vwFile[0], vwText->NumLines - vwText->NumSplit, vwText->NumBytes );
- else
- strcpy( ibuf, "No text in memory (press 'l' to load a file)" );
-
- Move( vwRPort, 1, vwFont->tf_Baseline );
- Text( vwRPort, ibuf, strlen( ibuf ));
- }
-
- void ErrorLine( UBYTE *text )
- {
- ClrLin();
-
- vwErr = TRUE;
-
- SetAPen( vwRPort, 1 );
- SetDrMd( vwRPort, JAM1 );
- Move( vwRPort, 1, vwFont->tf_Baseline );
- Text( vwRPort, text, strlen( text ));
- }
-
- void Error( UBYTE *error )
- {
- rtEZRequestTags( error, "Continue", NULL, NULL,
- RT_ReqPos, REQPOS_CENTERSCR,
- RT_WaitPointer, TRUE,
- RTEZ_ReqTitle, CX_NAME " " CX_VERSION,
- RTEZ_Flags, EZREQF_CENTERTEXT,
- TAG_DONE );
-
- ClearMsgPort( vwIdPort );
- }
-
- long IsAsciiChar( UBYTE chr )
- {
- if ( chr > 0x00 && chr < 0x09 ) return( FALSE );
- if ( chr > 0x0d && chr < 0x1b ) return( FALSE );
- if ( chr > 0x1b && chr < 0x20 ) return( FALSE );
- if ( chr > 0x7f && chr < 0x9b ) return( FALSE );
- return( TRUE );
- }
-
- long CheckAscii( UBYTE *name )
- {
- BPTR file;
- UBYTE memory[ 100 ];
- ULONG cnt, ret = TRUE, len;
-
- if ( file = Open( name, MODE_OLDFILE )) {
- len = Read( file, memory, 100L );
- Close( file );
- if ( len ) {
- for ( cnt = 0; cnt < len; cnt++ ) {
- if ( ! IsAsciiChar( memory[ cnt ] )) {
- ret = FALSE;
- break;
- }
- }
- }
- }
- return( ret );
- }
-
- long CheckPP( void )
- {
- BPTR file;
- ULONG ident;
-
- if ( ! ( file = Open( vwName, MODE_OLDFILE ))) {
- strcat( vwName, ".pp" );
- if ( ! ( file = Open( vwName, MODE_OLDFILE ))) {
- vwName[ strlen( vwName ) - 3 ] = 0;
- return FALSE;
- }
- }
- Read( file, &ident, 4L );
- Close( file );
-
- if( ident == 'PP20' || ident == 'PX20' ) return TRUE;
- return FALSE;
- }
-
- long CountEsc( struct Line *line, long off )
- {
- UWORD i;
- LONG c = 0L;
- char *ptr = line->Text, chr;
-
- for( i = 0; i <= off; i++ ) {
- if( *ptr == ESC || *ptr == CSI ) {
- while( 1 ) {
- c++;
- i++;
- chr = ( *ptr++ ) - ' ';
- if(( chr >= '?' && chr <= 'Z' ) || !chr ) break;
- }
- }
- else ptr++;
- }
-
- return(c);
- }
-
- void PrintFound( UWORD y )
- {
- char wrd[256];
-
- setmem( &wrd[ 0 ], 256, 0 );
-
- Inform( "\033[32;43m" );
- strncpy( wrd, (char *)&vwSearch.Line->Text[ vwSearch.TextOffset ], vwSearch.StringSize );
- MoveTo( vwSearch.TextOffset - CountEsc( vwSearch.Line, vwSearch.TextOffset ) + 1, y );
- Inform( wrd );
- Inform( ResStr );
- }
-
- void myMain( long cli )
- {
- OpenLibraries();
-
- vwFile[ 0 ] = vwName[ 0 ] = vwPath[ 0 ] = 0;
-
- strcpy( vwPatt, "~(#?.info)" );
-
- #ifndef __DETACH
- if ( ! cli ) {
- if ( WBenchMsg->sm_ArgList->wa_Lock )
- CurrentDir( WBenchMsg->sm_ArgList->wa_Lock );
- }
- #endif
-
- SetupCommodity();
- MainLoop();
- return;
- }
-
- #ifdef __DETACH
- void main( long numargs, long *argarray )
- {
- vwProc = ( struct Process * )FindTask( NULL );
- vwArgs = argarray;
-
- myMain( TRUE );
- return;
-
- atoi("");
- }
-
- void wbmain( struct WBStartup *su )
- {
- vwArgs = &vwWBArgs[ 0 ];
- WBenchMsg = su;
- myMain( FALSE );
- return;
- }
- #else
- extern struct Library *SysBase;
- extern struct WBStartup *_WBMsg;
-
- void _main( void )
- {
- vwProc = ( struct Process * )FindTask( NULL );
-
- if ( SysBase->lib_Version < 36 )
- _exit( RETURN_FAIL );
-
- if ( vwProc->pr_CLI ) {
- if ( vwFArgs = ReadArgs( Template, &vwArgs[ 0 ], &vwIArgs ))
- myMain( TRUE );
- return;
- } else {
- WBenchMsg = _WBMsg;
- myMain( FALSE );
- return;
- }
-
- _waitwbmsg();
- atoi("");
- }
- #endif
-